home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / fsw / zm302 / zm302_s.lzh / MPSRC045.LZH / ADP_0104.HAS < prev    next >
Text File  |  1996-06-16  |  5KB  |  225 lines

  1. *=======================================================
  2. *
  3. *    ADPCM->PCM 3.9kHz変換
  4. *
  5. *=======================================================
  6.  
  7. AtoP3n        macro        _X,_vol
  8.  
  9.         local        next
  10.  
  11.     .if    _X
  12.         cmpa.l        a3,a0            * トラップにかかった?
  13.         bcs        next
  14.         jsr        (a4)            * トラップ処理
  15.     .endif
  16. next:        moveq.l        #0,d0            * (4)
  17.         move.b        (a0)+,d0        * (8)
  18.         add.w        d0,d0            * (4)
  19.         adda.w        d0,a2            * (8)
  20.         add.w        (a2),d1            * (8)
  21.     .if    _vol=8
  22.         add.w        d1,(a1)+
  23.         add.w        d1,(a1)+
  24.         add.w        d1,(a1)+
  25.         add.w        d1,(a1)+
  26.     .else
  27.         move.w        d1,d0            * (4)
  28.         VOLUME        _vol,d0,d2
  29.         add.w        d0,(a1)+
  30.         add.w        d0,(a1)+
  31.         add.w        d0,(a1)+
  32.         add.w        d0,(a1)+
  33.     .endif
  34.         add.w        256*2(a2),d1        * (12)
  35.     .if    _vol=8
  36.         add.w        d1,(a1)+
  37.         add.w        d1,(a1)+
  38.         add.w        d1,(a1)+
  39.         add.w        d1,(a1)+
  40.     .else
  41.         move.w        d1,d0            * (4)
  42.         VOLUME        _vol,d0,d2
  43.         add.w        d0,(a1)+
  44.         add.w        d0,(a1)+
  45.         add.w        d0,(a1)+
  46.         add.w        d0,(a1)+
  47.     .endif
  48.         adda.w        256*2*2(a2),a2        * (16)
  49.  
  50.         endm
  51.  
  52. *=======================================================
  53.  
  54. AtoP_0104_mac    macro        _vol
  55.  
  56.         local        ADPCM_odd
  57.  
  58.         tst.b        CH_ODDEVEN(a5)        * ODD/EVEN FLAG    のチェック
  59.         bpl        ADPCM_odd        * 変換が1ADPCMずれる場合
  60.  
  61. *        前が奇数番目のADPCMを処理していた場合
  62. @@:        moveq.l        #(MIX_SIZE/4)-1,d2    * (4) 今回の処理中になんらかの
  63.         add.l        a0,d2            * (8) トラップが発生するか調べる
  64.         cmp.l        a3,d2            * (6)
  65.         bcs        @f            * (10)
  66.  
  67. *        トラップ判定あり
  68.         moveq.l        #MIX_SIZE/4-1,d6
  69. 1:        AtoP3n        1,_vol
  70.         dbra        d6,1b
  71.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  72.     .if    _vol=8
  73.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  74.     .else
  75.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  76.     .endif
  77.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  78.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  79.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  80.         rts
  81.  
  82. *        トラップ判定無し
  83. @@:        moveq.l        #MIX_SIZE/4-1,d6
  84. 1:        AtoP3n        0,_vol
  85.         dbra        d6,1b
  86.  
  87.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  88.     .if    _vol=8
  89.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  90.     .else
  91.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  92.     .endif
  93.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  94.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  95.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  96.         rts
  97.  
  98. *        前が偶数番目のADPCMを処理していた場合
  99. ADPCM_odd:    moveq.l        #MIX_SIZE/4,d2        * (4) 今回の処理中になんらかの
  100.         add.l        a0,d2            * (8) トラップが発生するか調べる
  101.         cmp.l        a3,d2            * (6)
  102.         bcs        @f            * (10)
  103.  
  104. *        トラップ判定あり
  105.     .if    _vol=8
  106.         add.w        d1,(a1)+
  107.         add.w        d1,(a1)+
  108.         add.w        d1,(a1)+
  109.         add.w        d1,(a1)+
  110.     .else
  111.         move.w        d1,d0
  112.         VOLUME        _vol,d0,d2
  113.         add.w        d0,(a1)+
  114.         add.w        d0,(a1)+
  115.         add.w        d0,(a1)+
  116.         add.w        d0,(a1)+
  117.     .endif
  118.         moveq.l        #MIX_SIZE/4-1-1,d6
  119. 1:        AtoP3n        1,_vol
  120.         dbra        d6,1b
  121.                             * ラストの1回
  122.         cmpa.l        a3,a0            * トラップにかかった?
  123.         bcs        1f
  124.         jsr        (a4)            * トラップ処理
  125. 1:        moveq.l        #0,d0            * (4)
  126.         move.b        (a0)+,d0        * (8)
  127.         add.w        d0,d0            * (4)
  128.         adda.w        d0,a2            * (8)
  129.         add.w        (a2),d1            * (8)
  130.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  131.     .if    _vol=8
  132.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  133.         add.w        d1,(a1)+
  134.         add.w        d1,(a1)+
  135.         add.w        d1,(a1)+
  136.         add.w        d1,(a1)+
  137.     .else
  138.         move.w        d1,d0            * (4)
  139.         VOLUME        _vol,d0,d2
  140.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  141.         add.w        d0,(a1)+
  142.         add.w        d0,(a1)+
  143.         add.w        d0,(a1)+
  144.         add.w        d0,(a1)+
  145.     .endif
  146.         add.w        256*2(a2),d1        * (12)
  147.         adda.w        256*2*2(a2),a2        * (16)
  148.  
  149.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  150.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  151.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  152.         rts
  153.  
  154. *        トラップ判定無し
  155. @@:
  156.     .if    _vol=8
  157.         add.w        d1,(a1)+
  158.         add.w        d1,(a1)+
  159.         add.w        d1,(a1)+
  160.         add.w        d1,(a1)+
  161.     .else
  162.         move.w        d1,d0
  163.         VOLUME        _vol,d0,d2
  164.         add.w        d0,(a1)+
  165.         add.w        d0,(a1)+
  166.         add.w        d0,(a1)+
  167.         add.w        d0,(a1)+
  168.     .endif
  169.         moveq.l        #MIX_SIZE/4-1-1,d6
  170. 1:        AtoP3n        0,_vol
  171.         dbra        d6,1b
  172.                             * ラストの1回
  173.         moveq.l        #0,d0            * (4)
  174.         move.b        (a0)+,d0        * (8)
  175.         add.w        d0,d0            * (4)
  176.         adda.w        d0,a2            * (8)
  177.         add.w        (a2),d1            * (8)
  178.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  179.     .if    _vol=8
  180.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  181.         add.w        d1,(a1)+
  182.         add.w        d1,(a1)+
  183.         add.w        d1,(a1)+
  184.         add.w        d1,(a1)+
  185.     .else
  186.         move.w        d1,d0            * (4)
  187.         VOLUME        _vol,d0,d2
  188.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  189.         add.w        d0,(a1)+
  190.         add.w        d0,(a1)+
  191.         add.w        d0,(a1)+
  192.         add.w        d0,(a1)+
  193.     .endif
  194.         add.w        256*2(a2),d1        * (12)
  195.         adda.w        256*2*2(a2),a2        * (16)
  196.  
  197.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  198.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  199.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  200.         rts
  201.  
  202.         endm
  203.  
  204. *=======================================================
  205.  
  206. AtoP_0104_v00:    AtoP_0104_mac    0
  207. AtoP_0104_v01:    AtoP_0104_mac    1
  208. AtoP_0104_v02:    AtoP_0104_mac    2
  209. AtoP_0104_v03:    AtoP_0104_mac    3
  210. AtoP_0104_v04:    AtoP_0104_mac    4
  211. AtoP_0104_v05:    AtoP_0104_mac    5
  212. AtoP_0104_v06:    AtoP_0104_mac    6
  213. AtoP_0104_v07:    AtoP_0104_mac    7
  214. AtoP_0104_v08:    AtoP_0104_mac    8
  215. AtoP_0104_v09:    AtoP_0104_mac    9
  216. AtoP_0104_v10:    AtoP_0104_mac    10
  217. AtoP_0104_v11:    AtoP_0104_mac    11
  218. AtoP_0104_v12:    AtoP_0104_mac    12
  219. AtoP_0104_v13:    AtoP_0104_mac    13
  220. AtoP_0104_v14:    AtoP_0104_mac    14
  221. AtoP_0104_v15:    AtoP_0104_mac    15
  222. AtoP_0104_vnn:    AtoP_0104_mac    'n'
  223. AtoP_0104_non:    AtoP_0104_mac    'x'
  224.  
  225.